RESTful API 規格書
因為 RESTful API 需要前後端的合作,前端呼叫,後端設計開發,因此最好在正式運作之前先撰寫 RESTful API 規格書,如下圖所示。必須要確認的資訊有:

圖 1、上傳圖片的 RESTful API 規格範例
設定前端請求
有了這個規格書,就可以開始進行後端的開發,很明顯的,我們這個專案只需要一個 RESTful API 功能,就是上傳一張圖片,由後端來判斷這張圖片是屬於哪一種魚類,但因為魚類辨識功能尚未實作,所以我們在此只完成上傳圖片功能,而回應部分就固定回應一個答案就好,這樣方便前端進行開發。
打開 Advanced REST client (ARC)並根據規格書來進行設定,如下圖所示:

圖 2、Advanced REST client 設定前端請求
進行後端 Django 撰寫
打開終端機或是 Putty 連線到 AWS EC2,進行 Django 後端程式的撰寫,因為對應到的是 POST 的請求,所以只需要修改 post 方法的修改即可。
新增一個文件夾 upload 用來存放圖片,要特別注意相對應的文件夾位置,upload 的所在位置與 fishsite 應用是同等的,如下圖所示。
cd ~/fishRecognition/fishsite
mkdir upload

圖 3、圖片文件夾的所在位置
修改 fishsite/view.py 的 post 方法,主要有三部分,第一部分是接收前端所傳來的圖片,第二部分是查詢資料庫,而第三部分則是加上 fishQtn 魚隻數量的欄位,以符合規格書的要求
    def post(self, request, *args, **krgs):
        print('FishView->post')
        uploadFile = request.FILES.get('fileUpload')
        # write the uploaded file into the server
        filename = r'upload/{}'.format(uploadFile.name)
        with open(filename, 'wb') as f:
            for chunk in uploadFile.chunks():
                f.write(chunk)
        print('FishView->upload')
        sql = "SELECT fishName, distribution, LatinName FROM fishInfoTbl WHERE mark=1"
        with connection.cursor() as cursor:
            cursor.execute(sql)
            data = dictfetchall(cursor)
        print('FishView->' + sql)
        data[0]['fishQtn']=1
        return JsonResponse(data,safe=False)

圖 4、後端 RESTful API 部分程式碼
完成了這一部分程式碼後就可以啟動 Django Web 伺服器功能,然後透過 ARC 來呼叫後端服務,成功的話可以看到以下的畫面,正常回傳回應。
python3 manage.py runserver 0.0.0.0:8000

圖 5、ARC 來呼叫後端服務
也在到後端去確認一下檔案是否有寫入,除了確認檔案名稱外,也要確認檔案大小是否正確,如下圖所示。

圖 6、確認後端是否有正確接收檔案
參考資料